home *** CD-ROM | disk | FTP | other *** search
/ Chip 2005 March / CMCD0305.ISO / Software / Shareware / Utilitare / emu / Emu8086_Setup_307c.exe / {app} / Samples / bcd_add.asm < prev    next >
Assembly Source File  |  2002-08-02  |  1KB  |  75 lines

  1. ; This example shows how to add
  2. ; huge unpacked BCD numbers
  3.  
  4. #make_COM#
  5.  
  6. ORG     100h
  7.  
  8. ; skip data:
  9. JMP     start
  10.  
  11. ; number of digits to
  12. ; process:
  13. len     EQU     5
  14.  
  15. ; first number is: '79,521':
  16. num1    DB      1,2,5,9,7
  17. ; second number is: '82,191':
  18. num2    DB      1,9,1,2,8
  19.  
  20. ; for keeping result,
  21. ; result will be '161,712':
  22. sum     DB      6 DUP (0)
  23.  
  24.  
  25. start:  ; entry point.
  26.  
  27. ; digit pointer:
  28. XOR     BX, BX
  29.  
  30. ; setup the loop:
  31. MOV     CX, len 
  32.         
  33. next_digit:
  34.  
  35.         ; add digits:
  36.         MOV     AL, num1[BX]
  37.         ADC     AL, num2[BX]
  38.         
  39.         ; ASCII adjust:
  40.         AAA
  41.         
  42.         ; store result:
  43.         MOV     sum[BX], AL
  44.         
  45.         ; point to next digit:
  46.         INC     BX
  47.         
  48.         LOOP    next_digit
  49.  
  50. ; include carry in result (if any):
  51. ADC     sum[BX], 0
  52.  
  53.  
  54. ; print out the result:
  55. MOV     CX, len+1
  56. ; start printing from
  57. ; less significant digit:
  58. MOV     BX, len
  59.  
  60. print_d:
  61.         MOV     AL, sum[BX]
  62.         ; convert to ASCII char:
  63.         OR      AL, 30h
  64.  
  65.         MOV     AH, 0Eh
  66.         INT     10h
  67.         
  68.         DEC     BX
  69.         
  70.         LOOP    print_d
  71.  
  72. RET
  73.  
  74. END
  75.